package DAO;

import Util.ConnectionUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.UnidadeMedida;

public class UnidadeMedidaDAO {

    private Connection con;

    public UnidadeMedidaDAO() throws Exception {
        con = ConnectionUtil.getConn();
    }

    public void insert(UnidadeMedida item) throws SQLException {
        String SQL = "INSERT INTO UNIDADEMEDIDA VALUES (?,?)";
        PreparedStatement stmt = con.prepareStatement(SQL);

        stmt.setInt(1, item.getCodigo());
        stmt.setString(2, item.getNome());
        stmt.execute();

    }

    public void delete(int codigo) throws SQLException {
        String SQL = "DELETE FROM UNIDADEMEDIDA WHERE UNM_ID = ?";
        PreparedStatement stmt = con.prepareStatement(SQL);
        stmt.setInt(1, codigo);
        stmt.execute();
    }

    public void update(UnidadeMedida item) throws SQLException {
        String SQL = "UPDATE UNIDADEMEDIDA SET UNM_NOME = ? WHERE UNM_ID = ?";
        PreparedStatement stmt = con.prepareStatement(SQL);
        stmt.setString(1, item.getNome());
        stmt.setInt(2, item.getCodigo());
        stmt.execute();
    }

    public UnidadeMedida findByCodigo(int codigo) throws Exception {
        String SQL = "SELECT UNM_ID, UNM_NOME FROM UNIDADEMEDIDA WHERE UNM_ID = ?";
        PreparedStatement p = con.prepareStatement(SQL);
        p.setInt(1, codigo);

        ResultSet rs = p.executeQuery();
        
        if (rs.next()) {
            UnidadeMedida unm = new UnidadeMedida();
            unm.setCodigo(rs.getInt("UNM_ID"));
            unm.setNome(rs.getString("UNM_NOME"));
            return unm;

        } else {
            return null;
        }
    }
    public List<UnidadeMedida> findByNome(String nome) throws Exception {
        String SQL = "SELECT UNM_ID, UNM_NOME FROM UNIDADEMEDIDA WHERE UNM_NOME LIKE ? ";
        PreparedStatement p = con.prepareStatement(SQL);
        p.setString(1, "%"+nome+"%");

        ResultSet rs = p.executeQuery();
        
        List<UnidadeMedida> lsUnidadeMedida = new ArrayList<>();
        while (rs.next()) {
            UnidadeMedida unm = new UnidadeMedida();
            unm.setCodigo(rs.getInt("UNM_ID"));
            unm.setNome(rs.getString("UNM_NOME"));
            lsUnidadeMedida.add(unm);
        }
        return lsUnidadeMedida;
    }

    public List<UnidadeMedida> findAll() throws SQLException {

        String SQL = "SELECT UNM_ID, UNM_NOME FROM UNIDADEMEDIDA WHERE 1=1";
        PreparedStatement p = con.prepareStatement(SQL);
        ResultSet rs = p.executeQuery();

        List<UnidadeMedida> lsUnidadeMedida = new ArrayList<>();
        while (rs.next()) {
            UnidadeMedida unm = new UnidadeMedida();
            unm.setCodigo(rs.getInt("UNM_ID"));
            unm.setNome(rs.getString("UNM_NOME"));
            lsUnidadeMedida.add(unm);
        }
        return lsUnidadeMedida;
    }

    
}